import http from "wechat-http"

/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'
/**
 * 配置请求拦截器
 * @param {} res 
 */
http.intercept.request = (params) => {
  console.log('request请求=', params.data);
  // 读取全局实例中的 token
  const token = getApp().token
  console.log('token=', token);
  // 指定一个公共的头信息
  // 初始为空对象后续可以扩展
  const defaultHeader = {}
  // 追加 token 头信息
  if (token) defaultHeader.Authorization = 'Bearer ' + token
  // 合并自定义头信息和公共头信息
  params.header = Object.assign(defaultHeader, params.header)
  return params
}
/**
 * 配置响应拦截器
 * @param {res} res 返回结果
 * @returns 
 */
http.intercept.response = async (res) => {
  console.log('response返回=', res);
  const app = getApp();
  if (res.statusCode === 401) {
    // refreshToken 过期的情形
    if (res.config.url.includes('/refreshToken')) {
      // 读取当前历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const lastPage = pageStack[pageStack.length - 1]
      // 取出当前页面路径，登录成功能跳转到该页面
      const redirectURL = lastPage.route

      // 引导用户到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    // 如果本地没有 refresh_token 没有必要刷新 token
    if (!app.refresh_token) return
    // 使用 refreshToken 更新 token
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        // 这时要注意使用的是 refresh_token
        Authorization: 'Bearer ' + app.refresh_token,
      },
    })
    // 更新 token 和 refresh_token
    app.setToken(res.data.token, res.data.refreshToken)
    // 重新发起请求
    return http(
      Object.assign(res.config, {
        // 传递新的 token
        header: {
          Authorization: app.token,
        },
      })
    )
  }
  return res;
}
/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http